/**
 *
 */
package br.gov.ms.tce.cjur.acao;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.BeanUtils;

import br.gov.ms.tce.bean.comum.Comparavel;
import br.gov.ms.tce.bean.comum.Email;
import br.gov.ms.tce.bean.comum.Endereco;
import br.gov.ms.tce.bean.comum.Municipio;
import br.gov.ms.tce.bean.comum.Pessoa;
import br.gov.ms.tce.bean.comum.Telefone;
import br.gov.ms.tce.bean.comum.TipoClassificacao;
import br.gov.ms.tce.bean.comum.Uf;
import br.gov.ms.tce.bean.comum.UnidadeAdministrativa;
import br.gov.ms.tce.bean.comum.UnidadeGestora;
import br.gov.ms.tce.cjur.helper.CjurHelper;

/**
 * Esta classe abstrata que serve para separa os objetos de tela de uma nova solicitação de ug ou responsavel
 * @author Anderson Paulino
 * @date 11/08/2011
 */
public abstract class SolicitacaoNovaAbstractView implements Serializable{

	
	/**
	 * serialVersionUID:long
	 */
	private static final long serialVersionUID = 6115303406400166910L;
	
	private Pessoa pessoaAlterada;
	
	private Pessoa pessoaOriginal;
	
	private Telefone telefone;	
	
	private Endereco endereco;
	
	private Email email;
	
	private Boolean pesquisarPessoa;
	
	private UnidadeAdministrativa ua;	
	
	private List<Uf> ufs;
	
	private List<Municipio> municipios;	
	
	private List<UnidadeAdministrativa> uas;
	
	private List<UnidadeGestora> ugs;	
	
	
	
	
	
	
	
	public SolicitacaoNovaAbstractView(Pessoa pessoaOriginal){
		this.pesquisarPessoa=false;
		this.pessoaOriginal=pessoaOriginal; 
		this.municipios = new ArrayList<Municipio>();
		this.ugs = new ArrayList<UnidadeGestora>();
	}
	
	
	

	/**
	 * Este método inicia as propriedades da pessoa alterada.
	 */
	public void iniciaProprieadadesPessoaAlterada(Pessoa pessoa) {
		pessoaAlterada = pessoa;
		endereco = new Endereco(TipoClassificacao.TIPO_ENDERECO_RESIDENCIAL);
		pessoaAlterada.getEnderecos().add(endereco);
		telefone = new Telefone(TipoClassificacao.TIPO_TELEFONE_RESIDENCIAL);
		pessoaAlterada.getTelefones().add(telefone);		
		email = new Email(TipoClassificacao.TIPO_EMAIL_PROFISSIONAL);
		pessoaAlterada.getEmails().add(email);
	}	
	
	/**
	 * Seleciona a pessoa, e copia as propriedades para o objeto pessoaAlterada.
	 */
	public void copiarPropriedades(){		
		BeanUtils.copyProperties(pessoaOriginal, pessoaAlterada,new String[]{"emails","enderecos","telefones","documentoPessoals"});
		CjurHelper.copiaPropriedades(endereco, TipoClassificacao.TIPO_ENDERECO_RESIDENCIAL, new ArrayList<Comparavel>(pessoaOriginal.getEnderecos()));				
		CjurHelper.copiaPropriedades(telefone, TipoClassificacao.TIPO_TELEFONE_RESIDENCIAL, new ArrayList<Comparavel>(pessoaOriginal.getTelefones()));
		CjurHelper.copiaPropriedades(email, TipoClassificacao.TIPO_EMAIL_PROFISSIONAL, new ArrayList<Comparavel>(pessoaOriginal.getEmails()));		
	}

	/**
	 * @return Retorna o valor da propriedade endereco
	 */
	public Endereco getEndereco() {
		return endereco;
	}

	/**
	 * @param Configura o valor da propriedade endereco
	 */
	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	/**
	 * @return Retorna o valor da propriedade ufs
	 */
	public List<Uf> getUfs() {
		return ufs;
	}

	/**
	 * @param Configura o valor da propriedade ufs
	 */
	public void setUfs(List<Uf> ufs) {
		this.ufs = ufs;
	}

	/**
	 * @return Retorna o valor da propriedade municipios
	 */
	public List<Municipio> getMunicipios() {
		return municipios;
	}

	/**
	 * @param Configura o valor da propriedade municipios
	 */
	public void setMunicipios(List<Municipio> municipios) {
		this.municipios = municipios;
	}

	/**
	 * @return Retorna o valor da propriedade uas
	 */
	public List<UnidadeAdministrativa> getUas() {
		return uas;
	}

	/**
	 * @param Configura o valor da propriedade uas
	 */
	public void setUas(List<UnidadeAdministrativa> uas) {
		this.uas = uas;
	}

	/**
	 * @return Retorna o valor da propriedade ugs
	 */
	public List<UnidadeGestora> getUgs() {
		return ugs;
	}

	/**
	 * @param Configura o valor da propriedade ugs
	 */
	public void setUgs(List<UnidadeGestora> ugs) {
		this.ugs = ugs;
	}
	
	/**
	 * @return Retorna o valor da propriedade ua
	 */
	public UnidadeAdministrativa getUa() {
		return ua;
	}

	/**
	 * @param Configura o valor da propriedade ua
	 */
	public void setUa(UnidadeAdministrativa ua) {
		this.ua = ua;
	}


	/**
	 * @return Retorna o valor da propriedade telefone
	 */
	public Telefone getTelefone() {
		return telefone;
	}


	/**
	 * @param Configura o valor da propriedade telefone
	 */
	public void setTelefone(Telefone telefone) {
		this.telefone = telefone;
	}	

	/**
	 * @return Retorna o valor da propriedade email
	 */
	public Email getEmail() {
		return email;
	}


	/**
	 * @param Configura o valor da propriedade email
	 */
	public void setEmail(Email email) {
		this.email = email;
	}
	

	/**
	 * @return Retorna o valor da propriedade pessoaAlterada
	 */
	public Pessoa getPessoaAlterada() {
		return pessoaAlterada;
	}


	/**
	 * @param Configura o valor da propriedade pessoaAlterada
	 */
	public void setPessoaAlterada(Pessoa pessoaAlterada) {
		this.pessoaAlterada = pessoaAlterada;
	}


	/**
	 * @return Retorna o valor da propriedade pessoaOriginal
	 */
	public Pessoa getPessoaOriginal() {
		return pessoaOriginal;
	}


	/**
	 * @param Configura o valor da propriedade pessoaOriginal
	 */
	public void setPessoaOriginal(Pessoa pessoaOriginal) {
		this.pessoaOriginal = pessoaOriginal;
	}




	/**
	 * @return Retorna o valor da propriedade pesquisarPessoa
	 */
	public Boolean getPesquisarPessoa() {
		return pesquisarPessoa;
	}




	/**
	 * @param Configura o valor da propriedade pesquisarPessoa
	 */
	public void setPesquisarPessoa(Boolean pesquisarPessoa) {
		this.pesquisarPessoa = pesquisarPessoa;
	}
	
	
}
